package sum.book.common.core.model.dto;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import sum.book.common.core.constant.CodeEnum;
import sum.book.common.core.constant.ICodeEnum;

@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper=true)
public class SimplePageVO<T> extends RestDTO {
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -5619223391534235352L;

    /**
     * 构造器
     *
     * @param codeEnum code
     * @date 2018/05/29
     */
    public SimplePageVO(ICodeEnum codeEnum) {
        super(codeEnum);
        this.setPublishFlag(true);
    }

    /**
     * 构造器
     *
     * @param data 返回的数据
     */
    public SimplePageVO(T data) {
        super(CodeEnum.SUCCESS);
        this.setData(data);
        this.setPublishFlag(true);
    }

    /**
     * 构造器
     *
     * @param message 自定义消息
     * @param codeEnum code
     */
    public SimplePageVO(String message, ICodeEnum codeEnum) {
        super(message, codeEnum);
        this.setData(null);
        this.setPublishFlag(true);
    }

    /**
     * 构造器
     *
     * @param data 返回的数据
     * @param page 分页信息
     */
    public SimplePageVO(T data, IPage page) {
        super(CodeEnum.SUCCESS);
        this.setData(data);
        this.setPageInfo(page);
        this.setPublishFlag(true);
    }

    /**
     * 构造器
     *
     * @param publishFlag 是否发布接口
     */
    public SimplePageVO(T data, Boolean publishFlag) {
        super(CodeEnum.SUCCESS);
        this.setData(null);
        this.setPublishFlag(false);
    }

    /**
     *  是否发布接口
     */
    private Boolean publishFlag;

    /**
     * 统一返回的数据字段
     */
    T data;

    /**
     * 总记录数
     */
    private Long total;

    /**
     * 当前页的记录数
     */
    private Long pageSize;

    /**
     * 当前页号
     */
    private Long pageIndex;

    /**
     * 设置分页信息
     *
     * @param pageInfo 分页信息
     */
    public void setPageInfo(IPage pageInfo) {
        this.setTotal(pageInfo.getTotal());
        this.setPageIndex(pageInfo.getCurrent());
        this.setPageSize(pageInfo.getSize());
    }

}
